//串口发送十六进制数字数码管显示对应十进制数
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
int m,g,s; //对应数码管上百位,十位，个位；
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void Nixie(unsigned char Location,Number)//选择数码管+显示数字
{
	switch(Location)		//选择数码管
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NixieTable[Number];	//段码输出
	Delay(1);				//显示一段时间
	P0=0x00;				//段码清0，消影
}
void main()
{
	UART_Init();		//串口初始化
	while(1)
	{
		Nixie(1,m);//选择第一个数码管
		Nixie(2,s);//选择第二个数码管
		Nixie(3,g);//选择第三个数码管
		
		
	}
}

void UART_Routine() interrupt 4		//打开串口中断
{
	unsigned int i=0x00;
	int a=0;
	int b=0;
	int c=0;
	if(RI==1)					//如果接收标志位为1，接收到了数据
	{
		for(i;i<=0xFF;i++,a++)  //i为十六进制每次循环i+1；a+1；
		{
			if(a>=10){a=0,b++;}		
			if(b>=10){b=0,c++;}
			if(SBUF==i){m=c;s=b;g=a;}  //如果电脑端SBUF等于发送的十六进制数据
		}														 //数码管百位等于c十位等于b个位等于a
	  //UART_SendByte(SBUF);
		RI=0;					//接收标志位清0
		
	}
}
